[アップデート]NLBがTLS1.3に対応しました!

[アップデート]NLBがTLS1.3に対応しました!

新しく追加されたセキュリティポリシーの確認と簡単な検証を行ってみました。
Clock Icon2021.10.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

コンサルティング部の枡川です。
NLBがついにTLS1.3に対応しました。
今回のアップデートによりNLBでTLSを終端させた場合でも、TLS1.3で通信ができます。
- Network Load Balancer now supports TLS 1.3

TLS1.3について

TLS1.3の主な特徴としては、データ送信までのハンドシェイク(メッセージのやり取り)が少なくなっていることが挙げられます。
TLS1.2ではサーバクライアント間で2往復分メッセージをやり取りしてから、はじめてデータを送信します。
TLS1.3では1往復分のメッセージをやり取りしてデータを送信し始めるため、ハンドシェイクによるレイテンシを削減することができます。
また、安全ではない暗号を廃止したり、ハンドシェイクの一部についても暗号化を行うなどセキュリティ面でも強化がなされています。

追加されたセキュリティポリシー

ELBではSSL/TLS通信時に使用するプロトコルと暗号方式をセキュリティポリシーで設定します。
今回のアップデートを受けて、NLBで設定可能なセキュリティポリシーでTLS1.3関連のものが7つ追加されています。

  • ELBSecurityPolicy-TLS13-1-2-2021-06(recommend)
  • ELBSecurityPolicy-TLS13-1-2-Res-2021-06
  • ELBSecurityPolicy-TLS13-1-2-Ext1-2021-06
  • ELBSecurityPolicy-TLS13-1-2-Ext2-2021-06
  • ELBSecurityPolicy-TLS13-1-1-2021-06
  • ELBSecurityPolicy-TLS13-1-0-2021-06
  • ELBSecurityPolicy-TLS13-1-3-2021-06

今回はNLBのみでのアップデートなので、ALBでは既存のラインナップのままです。

2021/10/18現在では英語版ドキュメントに追加されたセキュリティポリシーの説明があります。
- TLS listeners for your Network Load Balancer

暗号方式のPriorityまで見ることができるため、各セキュリティポリシーについてdescribe-ssl-policiesを使用して確認します。
まず、以前の既定ポリシーであったELBSecurityPolicy-2016-08から確認します。

$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-2016-08 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-2016-08                    ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  1         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  2         |||
|||  ECDHE-ECDSA-AES128-SHA256     |  3         |||
|||  ECDHE-RSA-AES128-SHA256       |  4         |||
|||  ECDHE-ECDSA-AES128-SHA        |  5         |||
|||  ECDHE-RSA-AES128-SHA          |  6         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  7         |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  8         |||
|||  ECDHE-ECDSA-AES256-SHA384     |  9         |||
|||  ECDHE-RSA-AES256-SHA384       |  10        |||
|||  ECDHE-RSA-AES256-SHA          |  11        |||
|||  ECDHE-ECDSA-AES256-SHA        |  12        |||
|||  AES128-GCM-SHA256             |  13        |||
|||  AES128-SHA256                 |  14        |||
|||  AES128-SHA                    |  15        |||
|||  AES256-GCM-SHA384             |  16        |||
|||  AES256-SHA256                 |  17        |||
|||  AES256-SHA                    |  18        |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1                                      |||
|||  TLSv1.1                                    |||
|||  TLSv1.2                                    |||
||+---------------------------------------------+||

次に現在の既定であるELBSecurityPolicy-TLS13-1-2-2021-06(recommend)を確認します。
ELBSecurityPolicy-2016-08と比較するとTLSv1.1およびTLSv1に対応していないため、アップデートは慎重に行う必要があります。
また、TLSv1とTLSv1.1に相当する暗号化スイートを減らしてTLSv1.3に相当するものを追加しただけではなく、SHA1を使用する暗号化スイートであるECDHE-ECDSA-AES128-SHAECDHE-RSA-AES128-SHAが消えています。

$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-2-2021-06 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-2-2021-06          ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256        |  1         |||
|||  TLS_AES_256_GCM_SHA384        |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256  |  3         |||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  4         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  5         |||
|||  ECDHE-ECDSA-AES128-SHA256     |  6         |||
|||  ECDHE-RSA-AES128-SHA256       |  7         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  8         |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  9         |||
|||  ECDHE-ECDSA-AES256-SHA384     |  10        |||
|||  ECDHE-RSA-AES256-SHA384       |  11        |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1.2                                    |||
|||  TLSv1.3                                    |||
||+---------------------------------------------+||

下記3つについてはELBSecurityPolicy-TLS13-1-2-2021-06(recommend)と対応する暗号方式のみが異なります。

$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-2-Res-2021-06 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-2-Res-2021-06      ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256        |  1         |||
|||  TLS_AES_256_GCM_SHA384        |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256  |  3         |||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  4         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  5         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  6         |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  7         |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1.2                                    |||
|||  TLSv1.3                                    |||
||+---------------------------------------------+||
$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-2-Ext1-2021-06 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-2-Ext1-2021-06     ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256        |  1         |||
|||  TLS_AES_256_GCM_SHA384        |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256  |  3         |||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  4         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  5         |||
|||  ECDHE-ECDSA-AES128-SHA256     |  6         |||
|||  ECDHE-RSA-AES128-SHA256       |  7         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  8         |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  9         |||
|||  ECDHE-ECDSA-AES256-SHA384     |  10        |||
|||  ECDHE-RSA-AES256-SHA384       |  11        |||
|||  AES128-GCM-SHA256             |  12        |||
|||  AES128-SHA256                 |  13        |||
|||  AES256-GCM-SHA384             |  14        |||
|||  AES256-SHA256                 |  15        |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1.2                                    |||
|||  TLSv1.3                                    |||
||+---------------------------------------------+||
$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-2-Ext2-2021-06 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-2-Ext2-2021-06     ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256        |  1         |||
|||  TLS_AES_256_GCM_SHA384        |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256  |  3         |||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  4         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  5         |||
|||  ECDHE-ECDSA-AES128-SHA256     |  6         |||
|||  ECDHE-RSA-AES128-SHA256       |  7         |||
|||  ECDHE-ECDSA-AES128-SHA        |  8         |||
|||  ECDHE-RSA-AES128-SHA          |  9         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  10        |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  11        |||
|||  ECDHE-ECDSA-AES256-SHA384     |  12        |||
|||  ECDHE-RSA-AES256-SHA384       |  13        |||
|||  ECDHE-ECDSA-AES256-SHA        |  14        |||
|||  ECDHE-RSA-AES256-SHA          |  15        |||
|||  AES128-GCM-SHA256             |  16        |||
|||  AES128-SHA256                 |  17        |||
|||  AES128-SHA                    |  18        |||
|||  AES256-GCM-SHA384             |  19        |||
|||  AES256-SHA256                 |  20        |||
|||  AES256-SHA                    |  21        |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1.2                                    |||
|||  TLSv1.3                                    |||
||+---------------------------------------------+||

下記2つはTLSv1やTLSv1.1のリクエストがどうしても残ってしまう環境で使用することとなると思います。

$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-0-2021-06 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-0-2021-06          ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256        |  1         |||
|||  TLS_AES_256_GCM_SHA384        |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256  |  3         |||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  4         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  5         |||
|||  ECDHE-ECDSA-AES128-SHA256     |  6         |||
|||  ECDHE-RSA-AES128-SHA256       |  7         |||
|||  ECDHE-ECDSA-AES128-SHA        |  8         |||
|||  ECDHE-RSA-AES128-SHA          |  9         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  10        |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  11        |||
|||  ECDHE-ECDSA-AES256-SHA384     |  12        |||
|||  ECDHE-RSA-AES256-SHA384       |  13        |||
|||  ECDHE-RSA-AES256-SHA          |  14        |||
|||  ECDHE-ECDSA-AES256-SHA        |  15        |||
|||  AES128-GCM-SHA256             |  16        |||
|||  AES128-SHA256                 |  17        |||
|||  AES128-SHA                    |  18        |||
|||  AES256-GCM-SHA384             |  19        |||
|||  AES256-SHA256                 |  20        |||
|||  AES256-SHA                    |  21        |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1                                      |||
|||  TLSv1.1                                    |||
|||  TLSv1.2                                    |||
|||  TLSv1.3                                    |||
||+---------------------------------------------+||
$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-1-2021-06 --output table
---------------------------------------------------
|               DescribeSSLPolicies               |
+-------------------------------------------------+
||                  SslPolicies                  ||
|+-----------------------------------------------+|
||                     Name                      ||
|+-----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-1-2021-06          ||
|+-----------------------------------------------+|
|||                   Ciphers                   |||
||+--------------------------------+------------+||
|||              Name              | Priority   |||
||+--------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256        |  1         |||
|||  TLS_AES_256_GCM_SHA384        |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256  |  3         |||
|||  ECDHE-ECDSA-AES128-GCM-SHA256 |  4         |||
|||  ECDHE-RSA-AES128-GCM-SHA256   |  5         |||
|||  ECDHE-ECDSA-AES128-SHA256     |  6         |||
|||  ECDHE-RSA-AES128-SHA256       |  7         |||
|||  ECDHE-ECDSA-AES128-SHA        |  8         |||
|||  ECDHE-RSA-AES128-SHA          |  9         |||
|||  ECDHE-ECDSA-AES256-GCM-SHA384 |  10        |||
|||  ECDHE-RSA-AES256-GCM-SHA384   |  11        |||
|||  ECDHE-ECDSA-AES256-SHA384     |  12        |||
|||  ECDHE-RSA-AES256-SHA384       |  13        |||
|||  ECDHE-RSA-AES256-SHA          |  14        |||
|||  ECDHE-ECDSA-AES256-SHA        |  15        |||
|||  AES128-GCM-SHA256             |  16        |||
|||  AES128-SHA256                 |  17        |||
|||  AES128-SHA                    |  18        |||
|||  AES256-GCM-SHA384             |  19        |||
|||  AES256-SHA256                 |  20        |||
|||  AES256-SHA                    |  21        |||
||+--------------------------------+------------+||
|||                SslProtocols                 |||
||+---------------------------------------------+||
|||  TLSv1.1                                    |||
|||  TLSv1.2                                    |||
|||  TLSv1.3                                    |||
||+---------------------------------------------+||

下記はTLSv1.3でしか接続できないセキュリティポリシーです。攻めた設定になりますね。

$ aws elbv2 describe-ssl-policies --names ELBSecurityPolicy-TLS13-1-3-2021-06 --output table
--------------------------------------------------
|               DescribeSSLPolicies              |
+------------------------------------------------+
||                  SslPolicies                 ||
|+----------------------------------------------+|
||                     Name                     ||
|+----------------------------------------------+|
||  ELBSecurityPolicy-TLS13-1-3-2021-06         ||
|+----------------------------------------------+|
|||                   Ciphers                  |||
||+-------------------------------+------------+||
|||             Name              | Priority   |||
||+-------------------------------+------------+||
|||  TLS_AES_128_GCM_SHA256       |  1         |||
|||  TLS_AES_256_GCM_SHA384       |  2         |||
|||  TLS_CHACHA20_POLY1305_SHA256 |  3         |||
||+-------------------------------+------------+||
|||                SslProtocols                |||
||+--------------------------------------------+||
|||  TLSv1.3                                   |||
||+--------------------------------------------+||

やってみた

今回はシンプルにNLBとその配下にEC2インスタンス1台(Apache2.4.48)を立てた環境で検証してみます。
ターゲットグループの設定等は下記記事に沿って実施します。

セキュリティポリシーはELBSecurityPolicy-TLS13-1-2-2021-06(recommend)を選択します。
私のPC(MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports))にプリインストールされているcurlではTLS1.3で検証できないため、下記記事を参考にcurlをインストールし直します。

$ curl --version
curl 7.79.1 (x86_64-apple-darwin20.6.0) libcurl/7.79.1 (SecureTransport) OpenSSL/1.1.1l zlib/1.2.11 brotli/1.0.9 zstd/1.5.0 libidn2/2.3.2 libssh2/1.10.0 nghttp2/1.45.1 librtmp/2.3 OpenLDAP/2.5.8
Release-Date: 2021-09-22
Protocols: dict file ftp ftps gopher gophers http https imap imaps ldap ldaps mqtt pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS brotli GSS-API HSTS HTTP2 HTTPS-proxy IDN IPv6 Kerberos Largefile libz MultiSSL NTLM NTLM_WB SPNEGO SSL TLS-SRP UnixSockets zstd

curlを使用して接続することで、TLSv1.3で接続できることが確認できました。
暗号化スイートとして一番優先度が高いTLS_AES_128_GCM_SHA256が使用されていることも検証できました。
クライアント側からサーバへのメッセージ(OUTと記載されている行)の後、サーバからのメッセージが続き(INと記載されている行)、その後もう一度サーバからのメッセージを待つことなく、HTTPリクエストを送っていることがわかります。

$ curl --tlsv1.3 https://www.masukawa.classmethod.info > /dev/null --verbose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 54.199.24.194:443...
* Connected to www.masukawa.classmethod.info (54.199.24.194) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [122 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [10 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [4975 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [36 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [36 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=www.masukawa.classmethod.info
*  start date: Oct 15 00:00:00 2021 GMT
*  expire date: Nov 13 23:59:59 2022 GMT
*  subjectAltName: host "www.masukawa.classmethod.info" matched cert's "www.masukawa.classmethod.info"
*  issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
*  SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: www.masukawa.classmethod.info
> User-Agent: curl/7.79.1
> Accept: */*
>
{ [5 bytes data]
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
{ [124 bytes data]
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 18 Oct 2021 01:49:22 GMT
< Server: Apache/2.4.48 ()
< Upgrade: h2,h2c
< Connection: Upgrade
< Last-Modified: Mon, 18 Oct 2021 01:31:19 GMT
< ETag: "f-5ce96807a8a31"
< Accept-Ranges: bytes
< Content-Length: 15
< Content-Type: text/html; charset=UTF-8
<
{ [15 bytes data]
100    15  100    15    0     0    179      0 --:--:-- --:--:-- --:--:--   189

TLS1.2でも接続が可能です。
TLS1.2では、クライアント側からサーバへのメッセージ(OUTと記載されている行)の後、サーバからのメッセージが続き(INと記載されている行)、クライアントからのメッセージとサーバからのメッセージのやり取りが再度行われてからHTTPリクエストが送られています。

$ curl --tlsv1.2 --tls-max 1.2 https://www.masukawa.classmethod.info > /dev/null --verbose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 54.199.24.194:443...
* Connected to www.masukawa.classmethod.info (54.199.24.194) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
} [5 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [245 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [91 bytes data]
* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [4966 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [300 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [37 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: CN=www.masukawa.classmethod.info
*  start date: Oct 15 00:00:00 2021 GMT
*  expire date: Nov 13 23:59:59 2022 GMT
*  subjectAltName: host "www.masukawa.classmethod.info" matched cert's "www.masukawa.classmethod.info"
*  issuer: C=US; O=Amazon; OU=Server CA 1B; CN=Amazon
*  SSL certificate verify ok.
} [5 bytes data]
> GET / HTTP/1.1
> Host: www.masukawa.classmethod.info
> User-Agent: curl/7.79.1
> Accept: */*
>
{ [5 bytes data]
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Mon, 18 Oct 2021 01:49:48 GMT
< Server: Apache/2.4.48 ()
< Upgrade: h2,h2c
< Connection: Upgrade
< Last-Modified: Mon, 18 Oct 2021 01:31:19 GMT
< ETag: "f-5ce96807a8a31"
< Accept-Ranges: bytes
< Content-Length: 15
< Content-Type: text/html; charset=UTF-8
<
{ [15 bytes data]
100    15  100    15    0     0    124      0 --:--:-- --:--:-- --:--:--   129
* Connection #0 to host www.masukawa.classmethod.info left intact

TLS1.1ではtlsv1 alert protocol versionというエラーで接続ができません。

$ curl --tlsv1.1 --tls-max 1.1 https://www.masukawa.classmethod.info > /dev/null --verbose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying 54.199.24.194:443...
* Connected to www.masukawa.classmethod.info (54.199.24.194) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
} [5 bytes data]
* TLSv1.1 (OUT), TLS handshake, Client hello (1):
} [155 bytes data]
* TLSv1.1 (IN), TLS alert, protocol version (582):
{ [2 bytes data]
* error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Closing connection 0
curl: (35) error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

すでに構築済みのNLBに対しても、リスナーを選択して編集をクリックすることでセキュリティポリシーをアップデートすることが可能です。

また、マネジメントコンソールではELBSecurityPolicy-TLS13-1-2-2021-06が既定となっておりましたが、CLIで--ssl-policyを指定せずにリスナーを作成した場合はELBSecurityPolicy-2016-08が選択されました。
とはいえ、このあたりは変わる可能性もあるため--ssl-policyで選択することが推奨されます。

$ aws elbv2 create-listener --load-balancer-arn $NLB_ARN --protocol TLS --port 443  \
--default-actions Type=forward,TargetGroupArn=$TARGETGROUP_ARN --certificates $CERTIFICATION_ARN
{
    "Listeners": [
        {
            =========中略=========
            "SslPolicy": "ELBSecurityPolicy-2016-08",
            =========中略=========
        }
    ]
}

まとめ

NLBでTLS終端した場合でもTLS1.3を使用できるようになりました。
セキュアな暗号方式での接続に限定できるため、ELBSecurityPolicy-TLS13-1-2-2021-06の使用が推奨されます。
ただ、TLSv1.1やTLSv1は使用できなくなるため、現在のアクセスをチェックしつつ慎重に選択する必要があるとも言えます。
是非試してみて下さい!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.